package com.moxiao.yfjh.module.activity.service.activityInfo;

import com.moxiao.yfjh.framework.common.pojo.PageResult;
import com.moxiao.yfjh.module.activity.controller.admin.activityEnroll.vo.ActivityEnrollRespVO;
import com.moxiao.yfjh.module.activity.controller.admin.activityInfo.vo.ActivityInfoCreateReqVO;
import com.moxiao.yfjh.module.activity.controller.admin.activityInfo.vo.ActivityInfoExportReqVO;
import com.moxiao.yfjh.module.activity.controller.admin.activityInfo.vo.ActivityInfoPageReqVO;
import com.moxiao.yfjh.module.activity.controller.admin.activityInfo.vo.ActivityInfoUpdateReqVO;
import com.moxiao.yfjh.module.activity.dal.dataobject.activityInfo.ActivityInfoDO;

import javax.validation.Valid;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.Date;
import java.util.List;

/**
 * 相亲活动信息 Service 接口
 *
 * @author mx
 */
public interface ActivityInfoService {

    /**
     * 创建相亲活动信息
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createInfo(@Valid ActivityInfoCreateReqVO createReqVO);


    /**
     * 创建相亲活动信息
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createCommonInfo(@Valid ActivityInfoCreateReqVO createReqVO);

    /**
     * 更新相亲活动信息
     *
     * @param updateReqVO 更新信息
     */
    void updateInfo(@Valid ActivityInfoUpdateReqVO updateReqVO);

    Integer updateByInfo(@Valid ActivityInfoUpdateReqVO updateReqVO);
    /**
     * 删除相亲活动信息
     *
     * @param id 编号
     */
    void deleteInfo(Long id);

    /**
     * 获得相亲活动信息
     *
     * @param id 编号
     * @return 相亲活动信息
     */
    ActivityInfoDO getInfo(Long id);

    /**
     * 获得相亲活动信息列表
     *
     * @param ids 编号
     * @return 相亲活动信息列表
     */
    List<ActivityInfoDO> getInfoList(Collection<Long> ids);

    /**
     * 获得相亲活动信息分页
     *
     * @param pageReqVO 分页查询
     * @return 相亲活动信息分页
     */
    PageResult<ActivityInfoDO> getInfoPage(ActivityInfoPageReqVO pageReqVO);

    PageResult<ActivityInfoDO> getAppInfoPage(ActivityInfoPageReqVO pageReqVO);

    PageResult<ActivityInfoDO> selectPageByHeaderId(ActivityInfoPageReqVO pageReqVO);


    List<ActivityInfoDO> getInfoPageByNotHeader(ActivityInfoPageReqVO pageReqVO);

    Integer getInfoActivityInfoNotHeaderSum(ActivityInfoPageReqVO pageReqVO);

    /**
     * 获得相亲活动信息列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 相亲活动信息列表
     */
    List<ActivityInfoDO> getInfoList(ActivityInfoExportReqVO exportReqVO);



    ActivityInfoDO getActivityTodayLast(Date todayStart, Date todayEnd);


    Integer getActiveNo(String activeNo);

    /**
     * 获得相亲活动信息
     *
     * @param activeNo 编号
     * @return 相亲活动信息
     */
    ActivityInfoDO getActivityInfo(String activeNo);

    /**
     * 根据活动no获得相亲活动信息
     */
    ActivityInfoDO getNo(String activeNo);

    /**
     * 获取用户性别
     */
    int getBlindUserSex(Long userId);

    /**
     * 获得活动下所有商品的供货价之和
     */
    BigDecimal getSupplypriceAmount(Long activityId);

    List<ActivityInfoDO> getInfoPageList(ActivityInfoPageReqVO pageReqVO);

    /**
     * 修改活动状态
     *
     * @param id
     * @param status
     * @return
     */
    int updateByStatus(Long id, Byte status);

    /**
     * 活动/报名 退款
     *
     * @param enrollDO
     */
    void createPayRefund(ActivityEnrollRespVO enrollDO);
    /**
     * 根据创建者查询已经创建得活动次数
     * 开始时间，结束时间
     */
    int getActivityNum(long id, String start, String end);
}
